// G4提供的头文件
#include "G4ParticleTable.hh"       // G4的粒子查找表
#include "G4SystemOfUnits.hh"       // G4的单位制
#include "G4ThreeVector.hh"         // 三维直角坐标
// 用户编写的头文件
#include "G4BasicPrimaryGeneratorAction.hh"

// 构造函数
G4BasicPrimaryGeneratorAction::G4BasicPrimaryGeneratorAction(){

    // 创建一个G4粒子源查找表
    auto table = G4ParticleTable::GetParticleTable();

    // 创建一个GPS（通用粒子源）系统。『这个地方可以理解为：创建一个放射源』
    gps = new G4GeneralParticleSource();

    // 设置放射源的射线类型『Co-60发射的是伽马射线，所以射线类型选择伽马』
    gps->SetParticleDefinition(table->FindParticle("gamma"));

    // 设置放射源参数
    gps->GetCurrentSource()->GetPosDist()->SetPosDisType("Volume");                     // 位置分布类型为 Volume：粒子的出现随体积分布
    gps->GetCurrentSource()->GetPosDist()->SetPosDisShape("Sphere");                    // 位置分布形状为 Sphere：体积为球形
    gps->GetCurrentSource()->GetPosDist()->SetCentreCoords(G4ThreeVector(0, 0, 0));     // 设置球心坐标
    gps->GetCurrentSource()->GetPosDist()->SetRadius(5 * cm);                           // 设置球形放射源半径
    gps->GetCurrentSource()->GetAngDist()->SetAngDistType("iso");                       // 设置各向同性的发射

}

// 析构函数
G4BasicPrimaryGeneratorAction::~G4BasicPrimaryGeneratorAction(){

    delete gps;     // 释放内存
}

// 事件生成函数
void G4BasicPrimaryGeneratorAction::GeneratePrimaries(G4Event* e){

    // 设置放射源的射线能量为1.17MeV
    gps->GetCurrentSource()->GetEneDist()->SetMonoEnergy(1.17 * MeV);
    // 发射粒子
    gps->GeneratePrimaryVertex(e);

    // 设置放射源的射线能量为1.33MeV
    gps->GetCurrentSource()->GetEneDist()->SetMonoEnergy(1.33 * MeV);
    // 发射粒子
    gps->GeneratePrimaryVertex(e);
}
